// const ExcelJS = require("exceljs/dist/es5")

import { debug } from "console";
import { join } from "path";
import { stringify } from "querystring";
import { isFunction } from "util";

// import { count } from "console";

// let value:Object = "hello";
// let srcValue:String = String(value);
// console.log(srcValue);

// interface IA{
//     discriminator:"dddd",
//     name:string;
// }

// class A implements IA{
//     public discriminator:any = "dddd";
//     public name:string;
//     constructor(){
//         this.name = "hello";
//     };
//     public getValue():string
//     {
//         return "";
//     }
// }



// class B extends A{

//     // getValue():string{
//         //     // return ;
//         // }
// }
    
// class XX<T extends IA>{
    
// }

// let a:A = new A();
// a.name = "AAAA"
// let b:B = new B();

// console.log(Object.getPrototypeOf(a));
// console.log(Object.entries(a));
// console.log(Object.getOwnPropertyNames(a));
// console.log(Object.seal(b));
// console.log(Object.preventExtensions(b));
// console.log(Object.seal(a));

// console.log(a)
// let c = Object.create(a);
// console.log(c);
// console.log(c === a);
// console.log(typeof(a));
// // console.log(a instanceof IA, "instanceof");
// console.log(Object.getOwnPropertyDescriptor(a, "name"));
// console.log(Object.getPrototypeOf(a));
// console.log(Object.create(a));
// console.log(a.discriminator == "dddd");
// let BB:A = new A();
// let ss:string = BB["name"]
// // console.log(ss?.length > 0)

// let list:A[] = [BB];
// console.log(list);
// list.push.apply(list, [a, a]);
// console.log(list);

// let b:B = new B();
// console.log(b instanceof A);

// let cc = undefined;
// console.log(cc === null);

// type aaa = string | boolean | number;
// let v:aaa = 123;
// console.log(v) 

// let obj:Object = {a: 1, b: 2, c: 3};

// for(let key in obj){
//     console.log(key);
// }

// let list:any[] = Object.values(obj);
// for(let key of list){
//     console.log(key);
// }


// let map:Map<number, number> = new Map<number, number>();
// map.set(1,2);
// map.set(11,12);
// map.set(21, 22);
// if(1 in map){
//     console.log("It is in Map");
// }
// else{
//     console.log("no")
// }
// console.log(11 in map);

// let obj:object = {
//     myname: 'lin',
//     yourname: 'zhang'
// }

// if('myname' in obj){
//     console.log("in in");
// }
// else{
//     console.log("no in")
// }

// let list:number[] = [1,2,3,4,5];
// let count:number = 10000000;
// console.profile();
// for(let i:number = 0;i < count;i ++){
//     let subList:number[] = [...list];
// }
// console.profileEnd();
// console.profile();
// for(let i:number = 0;i < count;i ++){
    //     let subList:number[] = list.concat();
    // }
    // console.profileEnd();
    
    // console.log(Object.is(list, subList));


//=========================================================================================
/**
 *  数组合并、复制使用新的方法 [...list, ...list]
 */
// let list:number[] = [1,2,3];
// let list1:number[] = [3, 3, 3];
    
// function task1():void
// {
//     for(let i:number = 0;i < 1000000; i ++){
//         let list2:number[] = [...list, ...list1];
//     }
// }

// function task2():void
// {
//     for(let i:number = 0;i < 1000000; i ++){
//         let list2:number[] = list.concat(list1);
//     }
// }

// function task3():void
// {
//     for(let i:number = 0;i < 1000000; i ++){
//         let list2:number[] = list.concat(list1);
//         list2.length;
//     }
// }
// console.profile("task2");
// task2();
// console.profileEnd("task2");

// console.profile("task1");
// task1();
// console.profileEnd("task1");
//=========================================================================================

// class StringB{
//     private _list:string[];
//     constructor(){
//         this._list = [];
//     }

//     public append(...args: string[]):void
//     {
//         Array.prototype.push(this._list, args);
//     }

//     public toString():string
//     {
//         return this._list.join();
//     }

//     public clear():void
//     {
//         this._list.length = 0;
//     }
// }

// function appendStr():void
// {
//     let strB:StringB = new StringB();
//     for(let i:number = 0; i < 1000000;i ++){
//         strB.append("aaa", "bbb", "ccc", "ddd", "eee");
//         let str:string = strB.toString();
//     }
// }

// function appendStr1():void
// {
//     for(let i:number = 0; i < 1000000;i ++){
//         let str:string = "aaa" + "bbb" + "ccc" + "ddd" + "eee";
//     }
// }

// function appendStr2():void
// {
//     for(let i:number = 0; i < 1000000;i ++){
//         let str:string = join("aaa", "bbb", "ccc", "ddd", "eee");
//     }
// }


// function task():void
// {
//     let map:Map<string, string> = new Map<string, string>();
//     map.set("1", "2");
//     map.set("3", "4");
//     console.log(map instanceof Map);

//     let a:Object = {
//         key:{hello: "111"},
//         c:"lin1",
//         d:111
//     }

//     let keys:string[] = Object.keys(a);
//     for(let key of keys){
//     }

//     let b:Object = Object.assign({}, a);
//     console.log(Object.is(b, a));
// }

// // task();
// console.profile("str1");
// appendStr();  
// console.profileEnd("str1");

// console.profile("str2");
// appendStr1();
// console.profileEnd("str2");

// console.profile("str3");
// appendStr2();
// console.profileEnd("str3");
// function inserAt(list:string[], index:number, value:string):void
// {
//     if(index < 0){
//         return;
//     }
//     if(index == 0){
//         list.unshift(value);
//     }
//     else if(index > list.length){
//         return;
//     }
//     else if(index == list.length){
//         list.push(value);
//     }
//     else{
//         let headList:string[] = list.slice(0, index - 1);
//         let tailList:string[] = list.slice(index - 1, list.length);
//         headList.push(value);
//         Array.prototype.push.apply(headList, tailList)
//         list = headList;
//     }
// }

// let list:string[] = ["a", "b", "c", "d", "e"];
// inserAt(list, 5, "33");
// console.log(list);\


// function check(){
//     let obj:object = {"aa": 1, "bb":2};
//     if("aa" in obj){
//         console.log(true);
//         let val = obj["aa"];
//         console.log(val)
//     }
//     else{
//         console.log("在你妹啊")
//     }
// }

// check();

// function task():void
// {
//     // let map:Map<string, string> = new Map<string, string>();
//     // map.set("1", "2");
//     // map.set("3", "4");

//     // console.log([...map.values()]);
//     // let obj:object = {"a": "1", "b":3}
//     // for(let key in obj){
//     //     console.log(key);
//     // }
//     let num:number = 1000000;
//     console.time('test1');
//     let res:string[] = [];
//     for(let i:number = 0;i < num;i ++){
//         res.push(String.fromCharCode(i % 96 + 32));
//     }
//     let str:string = res.join('');
//     // console.log(str);
//     console.timeEnd("test1");

//     console.time("test2");
//     let reslist:string[] = [];
//     let count:number = 0;
//     let numList:number[] = [];
//     for(let i:number = 0;i < num;i ++){
//         numList.push(i % 96 + 32);
//         count ++;
//         if(count == 4094){
//             reslist.push(String.fromCharCode.apply(null, numList));
//             count = 0;
//             numList.length = 0;
//         }
//     }
//     if(count > 0)
//     {
//         reslist.push(String.fromCharCode.apply(null, numList));
//     }
//     str = reslist.join("");
//     // console.log(str);
//     console.timeEnd("test2");
// }
// task();


interface ITemp{
    name:string;
    age:number;
}

class Demo{
    constructor(){};
    /**
     * doSomething
     * tmp:ITemp     
    */
    public doSomething(tmp:ITemp):void
    {
        // String.fromCharCode
        // // console.log(`${tmp.name} + ${tmp.age}`)
        // let str:string = 'hello1, hello';
        // // let str2:string = 'hello2, hello';
        // console.time('time2');
        // var result:number = 0;
        // for(let i:number = 0;i < 100000000;i ++)
        // {
        //     str.indexOf(",");
        // }
        // console.timeEnd('time2');
        // console.time('time1')
        // for(let i:number = 0;i < 100000000;i ++)
        // {
        //     str.includes(",");
        // }
        // console.timeEnd('time1');

        // for(let i:number = 0;i < 10;i ++)
        // {
        //     setTimeout(() => {
        //         console.log(i);
        //     }, 10);
        // }

        // for(var i:number = 0;i < 10;i ++)
        // {
        //     setTimeout(() => {
        //         console.log(i);
        //     }, 10);
        // }

        // for(let i:number = 1;i < 100;i ++)
        // {
        //     if(i == 39)
        //     {
        //         debugger;
        //     }
        // }
    }

    // public doSomething2({name:string, age:number} = {}):void
    // {
    //     console.log(`${name} + ${age}`)
    // }

    
}

// let obj = {
//     name: 'hello',
//     age: 100,
//     size: 10
// }

// let demo:Demo = new Demo();
// demo.doSomething(obj);
// // demo.doSomething2(obj);

// interface A{
//     '/user': {name: string},
//     '/admin': {admin: string}
// }



